---
title: git
---

## 主要内容

### git 知识点

1. git 介绍 分布式版本控制工具 VS 集中式版本控制工具
2. git 安装
3. git 命令
4. git 分支 分支特性、分支创建、分支转换、分支合并、代码合并冲突解决
5. IDEA 继承 Git

### GitHub

1. 创建远程库
2. 代码推送 push
3. 代码拉取 pull
4. 代码克隆 clone
5. SSH 免密登录
6. Idea 集成 GitHub

### Gitee 码云

1. 码云创建远程库
2. Idea 继承 Gitee 码云
3. 码云连接 GitHub 进行代码的复制和迁移

### GitLab

1. GitLab 服务器的搭建和部署
2. Idea 集成 GitLab

## Git概述

Git 是一个免费的、开源的*分布式版本控制系统*，可以高效地处理从小型到大型的各种项目。
Git 易于学习，占地面积小、性能极快。它具有廉价的本地库、方便地暂存区域和多个工作流分支等特性。其性能优于 SVN 等版本控制工具。

### 何为版本控制

版本控制是一种记录文件内容变化，以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录，从而让用户能够查看历史版本，方便版本切换。

### 为什么需要版本控制
个人开发过渡到团队开发

### 版本控制工具
集中式版本控制工具，如 CVS、SVN 等，都有一个单一的集中管理的中央服务器，保存所有文件的修订版本。协同工作的用户都通过这台服务器，取出最新的文件或者提交更新。 每个人都能在一定程度上看到项目中其他人正在做什么。管理员也可以轻松掌控每个每个开发者的权限。但这么做的坏处是如果中央服务器单点故障，所有人都无法协同工作。

分布式版本控制工具，如 Git ，客户端提取的不是最新版本的文件快照，而是把代码库完整的镜像下来（本地库）。这样任何一处协同工作用的文件发生故障，事后都可以用其它客户端的本地仓库进行恢复。因为客户端的每一次文件提取操作，都是对整个文件仓库的完整备份。

分布式的版本控制系统出现之后解决了集中式版本控制系统的缺陷
1. 服务器断网情况下也可以进行开发（因为版本控制是本地进行的）。
2. 每个客户端保存的也都是完整的项目（包括历史记录，更加安全）
### git 的工作机制
![](https://wkq-img.oss-cn-chengdu.aliyuncs.com/pic20230423224100.png)

### git 和 代码托管中心
代码托管中心是基于网络服务器的远程代码仓库，一般简称为远程库。
## Git 常用命令



| 命令                                 | 作用               |
| ------------------------------------ | ------------------ |
| git config --global user.name 用户名 | 设置用户名         |
| git config --global user.email 邮箱  | 设置用户邮箱       |
| git init                             | **初始化本地库**   |
| git status                           | **查看本地库状态** |
| git add 文件名                       | **添加到暂存区**   |
| git commit -m "日志信息"             | **提交到本地库**   |
| git reflog                           | **查看历史记录**   |
| git reset --hard 版本号              | **版本穿梭**       |

 ### 设置用户信息
```shell title='基本语法'
PS C:\Users\21129\Documents\gitee\site.wkq.pub> git config --global user.name 王开琦
PS C:\Users\21129\Documents\gitee\site.wkq.pub> git config --global user.email wkq97@qq.com
PS C:\Users\21129\Documents\gitee\site.wkq.pub> cat C:\Users\21129\.gitconfig 
[credential "https://gitee.com"]
        provider = generic
[filter "lfs"]
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
        clean = git-lfs clean -- %f
[user]
        name = 王开琦        email = wkq97@qq.com

```
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中